import axios from 'axios'

const axiosCache = new Map()
const cacheTTL = 3 * 60_000 // 3 分钟

const instance = axios.create({
  baseURL: '/api',
  timeout: 10_000, // 10 秒
  withCredentials: true
})

// 请求拦截：命中缓存就提前返回
instance.interceptors.request.use(config => {
  // console.log('请求拦截', config)
  if(config.url && config.method === 'get') {
    const key = config.url + JSON.stringify(config.params || {})
    const hit = axiosCache.get(key)
    if (hit && Date.now() - hit.ts < cacheTTL) {
      config.adapter = () => Promise.resolve({ data: hit.data, status: 200 }) // 伪造响应
    }
  }
  return config
})

// 响应拦截：把结果写进缓存
instance.interceptors.response.use(res => {
  if(res && res.config) {
    // console.log('响应拦截', res.config)
    if(res.config.url && res.config.method === 'get') {
      const key = res.config.url + JSON.stringify(res.config.params || {})
      axiosCache.set(key, { data: res.data, ts: Date.now() })
    }
  }
  return res
})

export default instance